<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    // Promise的特征
    // 1. 对象的状态不受外界影响。Promise对象代表一个异步操作，有三种状态：pending（进行中）、fulfilled（已成功）和rejected（已失败）,只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态。 => 用户自己根据异步操作的结果改变状态和存储的数据

    // 2. 一旦状态改变，就不会再变，任何时候都可以得到这个结果。Promise对象的状态改变，只有两种可能：从pending变为fulfilled和从pending变为rejected。只要这两种情况发生，状态就凝固了，不会再变了，会一直保持这个结果，这时就称为 resolved（已定型）

    // 注意，为了行文方便，本章后面的resolved统一只指fulfilled状态，不包含rejected状态。


    /*  var p = new Promise(function (resolve, reject) {
         // 回调函数 -> 所谓的容器 -> 一般用来处理异步操作(同步也可以)
 
         setTimeout(() => {
             var num = Math.random(); // 0-1
             console.log(num);
             if (num >= 0.5) {
                 resolve("不拖堂");  // {<fulfilled>: '不拖堂'}
             } else {
                 reject("拖堂");   // {<rejected>: '拖堂'}
             }
             console.log("2s后:", p);
         }, 2000)
 
 
     }) */


    var p = new Promise(function (resolve, reject) {
        // 回调函数 -> 所谓的容器 -> 一般用来处理异步操作(同步也可以)

        setTimeout(() => {
            resolve("不拖堂");  // {<fulfilled>: '不拖堂'}
            reject("拖堂");   // {<rejected>: '拖堂'}
            console.log("2s后:", p);
        }, 2000)


    })

    console.log("加载时", p); // {<pending>:undefined}

</script>

</html>